/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GameAI;

import GameObject.*;
import java.util.*;

/**
 *
 * @author NGUYEN VAN TAM
 */
public class AIController {
    public int nscene;
    public int step;
    public boolean breakHeart;
    
    public AIController()
    {
        nscene = 1;
        step = 1;
        breakHeart = false;
    }
    
    // kiểm tra xem người chơi được phép đánh lá bài nào
    public boolean CheckCardPlay(Player player, CenterPlayer center, Card cardPlay)
    {
            // đây là lượt đi đầu tiên
            if(step == 1)
            {
                // nếu là người xuất bài đầu tiên thì chỉ có 2 chuồn được đánh
                if(player._indexStart == 1)
                {
                    if(cardPlay._attributes._cardtype == SettingGameObject.CHUON && 
                            cardPlay._attributes._value == SettingGameObject.HAI)
                    {
                        return true;
                    }
                    else 
                    {
                        return false;
                    }
                }
                else 
                {
                    // kiểm tra nước đi đầu tiên chỉ cho phép đánh nươc cùng đi
                    // không được đánh nước cơ, không được đánh đầm bích 
                    if(CheckExitCardTheSameType(player, SettingGameObject.CHUON))
                    {
                        if(cardPlay._attributes._cardtype == SettingGameObject.CHUON)
                        {
                            return true;
                        }
                        return false;
                    }
                    else 
                    {
                        if(cardPlay._attributes._cardtype == SettingGameObject.RO)
                        {
                            return true;
                        }
                        else if(cardPlay._attributes._cardtype == SettingGameObject.BICH)
                        {
                            if(cardPlay._attributes._value != SettingGameObject.DAM)
                            {
                                return true;
                            }
                        } 
                        return false; 
                    }
                }
            }
            // không phải lượt đi đầu tiên
            else 
            {
                if(player._indexStart == 1)
                {
                    if(breakHeart == true)
                        return true;
                    else 
                    {
                        if(CheckExitCardTheSameType(player, SettingGameObject.CHUON) &&
                                CheckExitCardTheSameType(player, SettingGameObject.RO) && 
                                CheckExitCardTheSameType(player, SettingGameObject.BICH))
                        {
                            return true;// chỉ còn lá bài cơ không
                        }
                        else 
                        {
                            // còn lá khác lá bài cơ mà chưa break heart thì chỉ được đánh lá bài khác là bài cơ
                            if(cardPlay._attributes._cardtype != SettingGameObject.CO)
                            {
                                return true;
                            }
                            else 
                            {
                                return false;
                            }
                                   
                        }
                    }
                }
                else 
                {
                    // nếu tồn tại lá bài trùng với lá bài đánh đầu tiền thỉ phải xuất lá bài đó 
                    if(CheckExitCardTheSameType(player, center.listCard.get(0)._attributes._cardtype))
                    {
                        if(cardPlay._attributes._cardtype == center.listCard.get(0)._attributes._cardtype)
                        {
                            return true;
                        }
                        return false;
                    }
                    // nếu không có lá bài nào giống với lá bài đó thì được phép chọn đánh bất kí là bào nào
                    else 
                    {
                        if(cardPlay._attributes._cardtype == SettingGameObject.CO)
                        {
                            breakHeart = true;
                        }
                        return true; 
                    }
                }
            }
    }
    
    // kiểm tra xem player có tồn tại lá bài cùng nước đi với lá bài được đi ra đầu tiên hay không
    public boolean CheckExitCardTheSameType(Player player, int type)
    {
        for(int i = 0; i < player.lcardShow.size();i++)
        {
            if(player.lcardShow.get(i)._attributes._cardtype == type)
            {
                return true;
            }
        } 
        return false;
    }
    
    // kiểm tra 2 lá bài có cùng nước đi hay không
    public boolean CheckTheSameCard(Card card1,Card card2)
    {
        if(card1._attributes._cardtype == card2._attributes._cardtype)
            return true;
        else 
            return false;
    }
    
    // kiểm tra 4 lá bài xem lá nào lớn nhất và phần ăn thuộc về người chơi nào
    public int CheckCard(List<Card> lcard, int nCard)
    {
        List<Integer> list = new ArrayList<Integer>();
        for(int i = 1; i < list.size();i++)
        {
            if(lcard.get(i)._attributes._cardtype == lcard.get(0)._attributes._cardtype)
            {
                list.add(4);
            }
        }
        
        if(list.isEmpty())
        {
            return 0;
        }
        else {
            int temp = 0;//lcard.get(0)._attributes._value;
            for(int i = 0; i < list.size();i++)
            {
                if(lcard.get(i)._attributes._value > lcard.get(0)._attributes._value)
                {
                    temp = list.get(i);
                }
            }
            return temp;
        }
    }
}
